- Use `camelCase` for method names and variables, `PascalCase` for class and protocol names, and prefix all custom classes with a two- or three-letter project prefix: `MGUserSession`, `TKNetworkClient`.
- Write descriptive method names with keyword arguments that read like prose: `- (void)sendMessage:(NSString *)message toUser:(NSUser *)user` rather than `- (void)send:(NSString *)m user:(NSUser *)u`.
- Use `#pragma mark -` sections to organize method groups in `.m` files: `#pragma mark - UITableViewDataSource` keeps large implementation files navigable.
- Declare all properties in the `@interface` header; keep private properties in a class extension in the `.m` file: `@interface MyClass () @property (nonatomic, strong) NSArray *items; @end`.
- Use `nonatomic` on all properties unless you explicitly need thread-safe accessors — `atomic` has overhead and rarely provides sufficient thread safety alone.
- Prefer `copy` over `strong` for `NSString`, `NSArray`, `NSDictionary`, and `NSSet` properties to prevent mutation by callers who pass mutable subclasses.
- Name delegate methods with the delegating object as the first argument: `- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`.